const express = require('express');
const utils = require('utility');
const Router = express.Router();
const model = require('./model');
const User = model.getModel('user');
const Chat = model.getModel('chat');
const _filter = {'pwd': 0, '__v': 0};

Router.get('/list', function (req, res) {
    const {type} = req.query;
    User.find({type}, function (err, doc) {
        return res.json({code:0, data: doc});
    })
});

Router.get('/delete', function (req, res) {
    User.remove({}, function (err, doc) {
        return res.json(doc);
    })
});

Router.get('/remove', function (req, res) {
    Chat.remove({}, function (err, doc) {
        return res.json(doc);
    })
});


// 注意Router.post 这个请求类型
Router.post('/register', function (req, res) {
    const {user, pwd, type} = req.body;
    User.findOne({user}, function (err, doc) {
        if (doc) {
            return res.json({code: 1, msg: '用户名重复'});
        }

        const userModel = new User({user, pwd: md5Pwd(pwd), type});
        userModel.save(function (e, d) {
            if (e) {
                return res.json({code: 1, msg: '后端出错了'});
            }
            const {user, type, _id} = d;
            res.cookie('userid', _id);
            return res.json({code: 0, data: {user, type, _id}});
        });

    })
});

Router.post('/login', function (req, res) {
    const {user, pwd} = req.body;
    User.findOne({user, pwd: md5Pwd(pwd)}, _filter, function (err, doc) {
        if(!doc) {
            return res.json({code: 1, msg: '用户名或密码错误'});
        }
        res.cookie('userid', doc._id);
        return res.json({code: 0, data: doc})
    })
});

// 更新未读消息
Router.post('/readmsg', function (req, res) {
    const userid = req.cookies.userid;
    const {from} = req.body;
    Chat.update({from, to: userid},
        {'$set': {read: true}},
        {'multi': true},
        function (err, doc) {
        if (!err) {
           return res.json({code:0, num: doc.nModified});
        }
        return res.json({code: 1, msg: '修改失败'});
    });
});

Router.post('/update', function (req, res) {
    const userid = req.cookies.userid;
    if (!userid) {
        return res.dumps({code: 1});
    }
    const body = req.body;
    User.findByIdAndUpdate(userid, body, function (err, doc) {
        const data = Object.assign({}, {
            user: doc.user,
            type: doc.type
        }, body);
        return res.json({code: 0, data});
    })
});

Router.get('/info', function (req, res) {
    // 用户是否有cookie
    const {userid} = req.cookies;
    if (!userid) {
        return res.json({code: 1});
    }
    User.findOne({_id: userid}, _filter, function (err, doc) {
        if (err) {
            return res.json({code: 1, msg: '后端出错了'});
        }
        return res.json({code: 0, data: doc});
    })
});

Router.get('/getMsgList', function (req, res) {
    const user = req.cookies.userid;
    User.find({}, function (err, userdoc) {
        let users = {};
        userdoc.forEach(v=>{
            users[v._id] = {name: v.user, avatar: v.avatar}
        });
        Chat.find({'$or':[{from: user}, {to: user}]}, function (err, doc) {
            if(!err) {
                return res.json({code: 0, msgs: doc, users: users})
            }
        })
    });
    // const _filter ={'$or':[{from: user, to: user}]};

});


// 加密pwd
function md5Pwd(pwd) {
    const salt = 'react_is_good_#$12#$%&';
    return utils.md5(utils.md5(pwd + salt));
}

module.exports = Router;